/*
 * SpringCommandFactory.h
 *
 *  Created on: Oct 14, 2008
 *      Author: Ryan
 */

#ifndef SPRINGCOMMANDFACTORY_H_
#define SPRINGCOMMANDFACTORY_H_

#include "../../OOInterface/Objects/Factories/CommandFactory.h"


/**
 * @VERSION Spring 0.77b4
 */

class SpringCommandFactory: public OOInterface::CommandFactory
{
public:
	SpringCommandFactory() {}
	virtual ~SpringCommandFactory() {}

	virtual OOInterface::ConstCommandPtr createAttackCommand( OOInterface::ConstUnitPtr attackee );

	virtual OOInterface::ConstCommandPtr createBuildCommand( OOInterface::ConstUnitPtr building, const OOInterface::Point3f& location, const OOInterface::Direction& facing = NULL);

	virtual OOInterface::ConstCommandPtr createBuildUnitCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createCaptureCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createGuardCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createLoadCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createReclaimCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createRepairCommand( OOInterface::ConstUnitPtr unit );

	virtual OOInterface::ConstCommandPtr createMoveCommand( const OOInterface::Point3f& location );

	virtual OOInterface::ConstCommandPtr createPatrolCommand( const OOInterface::Point3f& location );

	virtual OOInterface::ConstCommandPtr createQueuedCommand( OOInterface::ConstCommandPtr command );
};

#endif /* SPRINGCOMMANDFACTORY_H_ */
